/** @file bmp.h 
 * Funktionen zum Schreiben und Lesen einer BMP Datei
 * 
 * @author Daniel Kummer, Sebastian Kummer
 * @date Donnerstag, Dezember 12, 2007
 * @version 1.0
 */

#ifndef BMP_H_
#define BMP_H_

#include "lcv-config.h"
#include "lcv-structs.h"


/**
 * Speichert ein lcv_picture Strukt im BMP-Format ab
 * @param pic Das zu speichernde Bild
 * @param filename Dateiname, bzw. Pfad
 * @return Erfolgsmeldung (positiv) oder Fehlernummer (negativ)
 */
char lcv_write_bmp(const lcv_picture pic, const char* filename);


/**
 * Liest ein Bitmap vom Dateisystem ein und wandelt es in ein lcv_picture um. 
 * Das Bitmap muss eine Farbtiefe von 24-bit aufweisen und "bottom-up" abgelegt sein
 * @param filename Dateiname, bzw. Pfad
 * @return Bild in Struktur
 */
lcv_picture lcv_read_bmp(const char* filename);


/**
 * Liest den Offset der Bilderdaten aus einem BMP-Header
 * @param header BMP-Header
 * @return Offset der Daten
 */
int lcv_get_data_offset(unsigned char * header);


/**
 * Schreibt den Bilddaten-Offset Wert in einen BMP-Header
 * @param header BMP-Header
 * @param offset Offset der Daten
 */
void lcv_set_data_offset(unsigned char * header, int offset);


/**
 * Liest die Bildhöhe aus einem BMP-Header
 * @param header BMP-Header
 * @return Höhe des Bildes
 */
int lcv_get_height(unsigned char * header);


/**
 * Schreibt die Bildhöhe in einen BMP-Header
 * @param header BMP-Header
 * @param height Höhe des Bildes
 */
void lcv_set_height(unsigned char * header, int height);


/**
 * Liest die Bildbreite aus einem BMP-Header
 * @param header BMP-Header
 * @return Breite des Bildes
 */
int lcv_get_width(unsigned char * header);


/**
 * Schreibt die Bildbreite in einen BMP-Header
 * @param header BMP-Header
 * @param height Breite des Bildes
 */
void lcv_set_width(unsigned char * header, int width);


/**
 * Liest die Farbtiefe aus einem BMP-Header
 * @param header BMP-Header
 * @return Farbtiefe
 */
int lcv_get_colordepth(unsigned char * header);

#endif /*BMP_H_*/
